package GrapheSimple;

import graphes.Arc;
import graphes.Dijkstra;
import graphes.Graphe;
import graphes.Noeud;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;

public class SimpleGrapheApplication {
	static Scanner in = new Scanner(System.in);
	
	public static void main(String[] args) {
		Graphe g = new Graphe();
		List<Noeud> noeuds = new ArrayList<Noeud>();
		List<Arc> arcs = new ArrayList<Arc>();
		//initialisation des noeuds du graphe simple
		for (int i = 0; i < 5; i++) {
			noeuds.add(new NoeudSimple());
			noeuds.get(i).setNumero(i+1);
		}
		//initialisation de la liste d'arc du graphe simple
		arcs.add(new ArcSimple(20,noeuds.get(1),noeuds.get(0)));
		arcs.add(new ArcSimple(15,noeuds.get(0),noeuds.get(1)));
		arcs.add(new ArcSimple(4,noeuds.get(0),noeuds.get(4)));
		arcs.add(new ArcSimple(10,noeuds.get(3),noeuds.get(0)));
		arcs.add(new ArcSimple(3,noeuds.get(3),noeuds.get(1)));
		arcs.add(new ArcSimple(5,noeuds.get(4),noeuds.get(3)));
		arcs.add(new ArcSimple(7,noeuds.get(4),noeuds.get(2)));
		arcs.add(new ArcSimple(2,noeuds.get(2),noeuds.get(3)));
		arcs.add(new ArcSimple(3,noeuds.get(2),noeuds.get(1)));
		//ajout des arc sortant à chaque noeud
		noeuds.get(0).AjoutArcSortant(arcs.get(1));
		noeuds.get(0).AjoutArcSortant(arcs.get(2));
		noeuds.get(1).AjoutArcSortant(arcs.get(0));
		noeuds.get(2).AjoutArcSortant(arcs.get(7));
		noeuds.get(2).AjoutArcSortant(arcs.get(8));
		noeuds.get(3).AjoutArcSortant(arcs.get(3));
		noeuds.get(3).AjoutArcSortant(arcs.get(4));
		noeuds.get(4).AjoutArcSortant(arcs.get(5));
		noeuds.get(4).AjoutArcSortant(arcs.get(6));
		
		g.setNoeuds(noeuds);
		g.setArcs(arcs);
		
		System.out.print("Noeud depart :");
		int depart = in.nextInt();		// -1 car liste commence à 0. neud saisi par user commence par 1.
		System.out.print("Noeud fin :");
		int arrivee = in.nextInt();		// -1 car liste commence à 0. neud saisi par user commence par 1.
		List<Arc> pcc=new ArrayList<Arc>();
		try{
			pcc = Dijkstra.AlgoDijkstra(g,noeuds.get(depart-1),noeuds.get(arrivee-1));
		}
		catch (IndexOutOfBoundsException ex){
			System.out.print("Hors zone memoire Dijkstra\n");
		}
		int len = pcc.size();
		System.out.printf("Nb arc parcouru : %d\n",len);
		for (int i=0;i<len;i++){
			try{
				System.out.printf("%s\n",pcc.get(i).toString());
			}
			catch (IndexOutOfBoundsException ex){
				System.out.print("Arc Inexistant\n");
			}
		}
		
	}

}
